package com.icarsaas.saas.common.utils;

import lombok.extern.slf4j.Slf4j;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

/**
 * EhCache缓存操作工具
 * 
 * @author chlingm
 */
@Slf4j
public class EhCacheUtil {

	private static final String DEFAULT_CACHE = "DEFAULT_CACHE";

	/**
	 * 获取EhCacheManager管理对象
	 */
	public static CacheManager getCacheManager() {
		return SpringContextUtil.getBean(CacheManager.class);
	}

	/**
	 * 获取EhCache缓存对象
	 */
	public static Cache getCache(String name) {
		return getCacheManager().getCache(name);
	}

	/**
	 * 查询缓存中的数据
	 * @param key
	 * @return
	 */
	public static Object getValue(String key) {
		// 在缓存管理器中获取一个缓存实例
		Cache cache = getCacheManager().getCache(DEFAULT_CACHE);
		Element element = cache.get(key);
		if (element == null) {
			return null;
		}
		log.info("从缓存EhCache中取出：" + key + "对应的值" + element.getObjectValue());
		return element.getObjectValue();
	}

	/**
	 * 添加缓存
	 * 
	 * @param key
	 * @param value
	 */
	public static void setValue(String key, Object value) {
		Cache cache = getCacheManager().getCache(DEFAULT_CACHE);
		// 使用获取到的缓存实例
		Element element = new Element(key, value);
		cache.put(element);// 添加缓存值
	}

	/**
	 * 删除缓存
	 * 
	 * @param key
	 */
	public static void remove(String key) {
		Cache cache = getCacheManager().getCache(DEFAULT_CACHE);
		Element element = cache.get(key);
		if (element != null) {
			cache.remove(key);
		}
		log.info("删除" + key + "对应的值");
	}

	/**
	 * 获取字典缓存对象
	 */
	public static Cache getDictCache() {
		return getCacheManager().getCache("dictionary");
	}

}
